#include "key.h"

u8 Key_Flag;

void Key16_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);

	GPIO_InitTypeDef GPIO_InitStructure;			 // 初始化结构体
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
	GPIO_InitStructure.GPIO_Pin = KEY_HANG;			 // 行
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(KEY_PORT, &GPIO_InitStructure);
	GPIO_SetBits(KEY_PORT, KEY_HANG); // 行，置高电平

	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;			 // 上拉输入,默认是高电平，按下按键，变成低电平
	GPIO_InitStructure.GPIO_Pin = KEY1 | KEY2 | KEY3 | KEY4; // 列
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(KEY_PORT, &GPIO_InitStructure);
	GPIO_SetBits(KEY_PORT, KEY1 | KEY2 | KEY3 | KEY4); // 列，默认高电平
}


// 指针输出参数(形参)
// 矩阵按键代码非常臃肿
void Key16_porc(u8 *key)
{
	GPIO_Write(KEY_PORT, 0x00FE);	//第一行
	if ( (Key1_Input == RESET) || (Key2_Input == RESET) || (Key3_Input == RESET) || (Key4_Input == RESET))	// 0 如果按下
	{
		Delay_ms(10);
		if (Key1_Input == RESET)
		{
			Key_Flag = 0;
			*key = 1;
			while(!Key1_Input);	// !1 = 0,等待松手
		}
		else if (Key2_Input == RESET)
		{
			Key_Flag = 1;
			*key = 2;
			while(!Key2_Input);	// !1 = 0,等待松手
		}
		else if (Key3_Input == RESET)
		{
			Key_Flag = 1;
			*key = 3;
			while(!Key3_Input);	// !1 = 0,等待松手
		}
		else if (Key4_Input == RESET)
		{
			Key_Flag = 1;
			*key = 4;
			while(!Key4_Input);	// !1 = 0,等待松手
		}
	}
	else
	{
		Key_Flag = 0;
		GPIO_Write(KEY_PORT, 0x00FF);
	}

	GPIO_Write(KEY_PORT, 0x00FD);	//第二行
	if ( (Key1_Input == RESET) || (Key2_Input == RESET) || (Key3_Input == RESET) || (Key4_Input == RESET))	// 0 如果按下
	{
		Delay_ms(10);
		if (Key1_Input == RESET)
		{
			Key_Flag = 0;
			*key = 5;
			while(!Key1_Input);	// !1 = 0,等待松手
		}
		else if (Key2_Input == RESET)
		{
			Key_Flag = 1;
			*key = 6;
			while(!Key2_Input);	// !1 = 0,等待松手
		}
		else if (Key3_Input == RESET)
		{
			Key_Flag = 1;
			*key = 7;
			while(!Key3_Input);	// !1 = 0,等待松手
		}
		else if (Key4_Input == RESET)
		{
			Key_Flag = 1;
			*key = 8;
			while(!Key4_Input);	// !1 = 0,等待松手
		}
	}
	else
	{
		Key_Flag = 0;
		GPIO_Write(KEY_PORT, 0x00FF);
	}

	GPIO_Write(KEY_PORT, 0x00FB);	//第三行
	if ( (Key1_Input == RESET) || (Key2_Input == RESET) || (Key3_Input == RESET) || (Key4_Input == RESET))	// 0 如果按下
	{
		Delay_ms(10);
		if (Key1_Input == RESET)
		{
			Key_Flag = 0;
			*key = 9;
			while(!Key1_Input);	// !1 = 0,等待松手
		}
		else if (Key2_Input == RESET)
		{
			Key_Flag = 1;
			*key = 10;
			while(!Key2_Input);	// !1 = 0,等待松手
		}
		else if (Key3_Input == RESET)
		{
			Key_Flag = 1;
			*key = 11;
			while(!Key3_Input);	// !1 = 0,等待松手
		}
		else if (Key4_Input == RESET)
		{
			Key_Flag = 1;
			*key = 12;
			while(!Key4_Input);	// !1 = 0,等待松手
		}
	}
	else
	{
		Key_Flag = 0;
		GPIO_Write(KEY_PORT, 0x00FF);
	}

	GPIO_Write(KEY_PORT, 0x00F7);	//第四行
	if ( (Key1_Input == RESET) || (Key2_Input == RESET) || (Key3_Input == RESET) || (Key4_Input == RESET))	// 0 如果按下
	{
		Delay_ms(10);
		if (Key1_Input == RESET)
		{
			Key_Flag = 0;
			*key = 13;
			while(!Key1_Input);	// !1 = 0,等待松手
		}
		else if (Key2_Input == RESET)
		{
			Key_Flag = 1;
			*key = 14;
			while(!Key2_Input);	// !1 = 0,等待松手
		}
		else if (Key3_Input == RESET)
		{
			Key_Flag = 1;
			*key = 15;
			while(!Key3_Input);	// !1 = 0,等待松手
		}
		else if (Key4_Input == RESET)
		{
			Key_Flag = 1;
			*key = 16;
			while(!Key4_Input);	// !1 = 0,等待松手
		}
	}
	else
	{
		Key_Flag = 0;
		GPIO_Write(KEY_PORT, 0x00FF);
	}

}
